package one2Ten;

import java.util.ArrayList;
import java.util.Stack;

/**
 * 输入一个链表的头节点，从尾到头反过来打印每个节点的值
 * Created by Wongy on 2018/3/9.
 */
public class Five5 {
    private static ArrayList printDesc(ListNode listNode) {
        if (listNode == null) {
            return new ArrayList();
        }
        Stack<Integer> stk = new Stack<>();
        while (listNode != null) {
            stk.push(listNode.val);
            listNode = listNode.next;
        }
        ArrayList<Integer> arr = new ArrayList<Integer>();
        while (!stk.isEmpty()) {
            arr.add(stk.pop());
        }
        return arr;
    }

    private static void printDesc2(ListNode listNode) {
        if (listNode != null) {
            if (listNode.next != null) {
                printDesc2(listNode.next);
            }
            System.out.print(listNode.val + " , ");
        }
    }

    public static void main(String args[]) {
        ListNode listNode1 = new ListNode(1);
        ListNode listNode2 = new ListNode(2);
        ListNode listNode3 = new ListNode(3);
        ListNode listNode4 = new ListNode(4);
        ListNode listNode5 = new ListNode(5);
        listNode1.next = listNode2;
        listNode2.next = listNode3;
        listNode3.next = listNode4;
        listNode4.next = listNode5;
        System.out.println(printDesc(listNode1));
        printDesc2(listNode1);

    }
}

class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}


